#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>

using namespace std;

#include <string>

//class Solution {
//public:
//    string addStrings(string num1, string num2) {
//        size_t num1i = num1.size() - 1;
//        size_t num2i = num2.size() - 1;
//        string ret;
//        int n = 0;
//
//        while (num1i != -1 || num2i != -1)
//        {
//            int sum1 = 0;
//            int sum2 = 0;
//            if (num1i != -1)
//            {
//                sum1 = num1[num1i] - '0';
//                num1i--;
//            }
//
//            if (num2i != -1)
//            {
//                sum2 = num2[num2i] - '0';
//                num2i--;
//            }
//
//            ret.push_back(((sum1 + sum2 + n) % 10) + '0');
//            if (((sum1 + sum2 + n) / 10) > 0)
//            {
//                n = (sum1 + sum2 + n) / 10;
//            }
//            else
//            {
//                n = 0;
//            }
//        }
//        if (n != 0)
//        {
//            ret.push_back(n + '0');
//        }
//        reverse(ret.begin(), ret.end());
//        return ret;
//    }
//};

//class Solution {
//public:
//    string reverseStr(string s, int k) {
//        size_t i = 2 * k;
//        while (i < s.size())
//        {
//            if (i % (2 * k) == 0)
//            {
//                reverse(s.begin() + i - (2 * k), s.begin() + i - k);
//            }
//            i += (2 * k);
//        }
//
//        auto end = s.begin() + i - k < s.end() ? s.begin() + i - k : s.end();
//        reverse(s.begin() + i - (2 * k), end);
//        return s;
//    }
//};
//
//class Solution {
//public:
//    string reverseWords(string s) {
//        auto begin = s.begin();
//        size_t pos = s.find(' ');
//        auto end = s.begin() + pos;
//
//        while (end < s.end())
//        {
//            reverse(begin, end);
//
//            begin = s.begin() + pos + 1;
//            pos = s.find(' ', pos + 1);
//            if (pos == string::npos)
//            {
//                end = s.end();
//            }
//            else
//                end = s.begin() + pos;
//        }
//        reverse(begin, s.end());
//
//        return s;
//    }
//};

class Solution {
public:
    string addStrings(string& num1, string& num2) {
        size_t num1i = num1.size() - 1;
        size_t num2i = num2.size() - 1;
        string ret;
        int n = 0;

        while (num1i != -1 || num2i != -1)
        {
            int sum1 = 0;
            int sum2 = 0;
            if (num1i != -1)
            {
                sum1 = num1[num1i] - '0';
                num1i--;
            }

            if (num2i != -1)
            {
                sum2 = num2[num2i] - '0';
                num2i--;
            }

            ret.push_back(((sum1 + sum2 + n) % 10) + '0');
            if (((sum1 + sum2 + n) / 10) > 0)
            {
                n = (sum1 + sum2 + n) / 10;
            }
            else
            {
                n = 0;
            }
        }
        if (n != 0)
        {
            ret.push_back(n + '0');
        }
        reverse(ret.begin(), ret.end());
        return ret;
    }

    string multiply(string num1, string num2) {
        int num1i = num1.size() - 1;
        string ret;
        string sum;
        int x = 0;

        while (num1i >= 0)
        {
            int sum1 = num1[num1i] - '0';
            num1i--;
            int num2i = num2.size() - 1;
            int n = 0;
            while (num2i >= 0)
            {
                int sum2 = num2[num2i] - '0';
                num2i--;
                sum.push_back((sum2 * sum1 + n) % 10 + '0');
                if ((sum2 * sum1 + n) / 10 > 0)
                {
                    n = (sum2 * sum1 + n) / 10;
                }
                else
                    n = 0;
            }
            if (n != 0)
            {
                sum.push_back(n % 10 + '0');
            }
            reverse(sum.begin(), sum.end());
            int j = x;
            while (j--)
            {
                sum.push_back('0');
            }
            x++;
            ret = addStrings(ret, sum);
            sum.clear();
        }
        if (ret[0] == '0')
            return string("0");
        return ret;
    }
};

//int main() {
//    //string s1;
//    //getline(cin, s1);
//
//    //size_t i = s1.rfind(' ');
//    //printf("%d\n", s1.size() - i - 1);
//    Solution().multiply(string("123"), string("456"));
//    return 0;
//}

#include "string.h"

int main()
{
    zsw::test_string1();
    return 0;
}